// 保存原始方法引用
const originalFetchThemes = frappe.ui.ThemeSwitcher.prototype.fetch_themes
const originalGetPreviewHtml = frappe.ui.ThemeSwitcher.prototype.get_preview_html
const originalToggleTheme = frappe.ui.ThemeSwitcher.prototype.toggle_theme

let 一级主题名 = null
let 二级主题名 = null
function 观主题名(主题名) {
    let sps = 主题名.split(".")
    一级主题名 = sps[0]

    二级主题名 = null
    if (sps.length > 1) {
        二级主题名 = sps[1]
    }
}

// 重写 fetch_themes 方法以添加自定义主题（带唯一名称）
frappe.ui.ThemeSwitcher.prototype.fetch_themes = function () {
    return new Promise(resolve => {
        originalFetchThemes.call(this).then(() => {
            this.themes.push({
                name: "light.mevinai",
                label: "浅色mevinai_theme",
                info: "引用 mevinai_theme 配色",
            })
            this.themes.push({
                name: "dark.mevinai",
                label: "深色mevinai_theme",
                info: "引用 mevinai_theme 配色",
            })
            this.themes.push({
                name: "automatic.mevinai",
                label: "自动mevinai_theme",
                info: "引用 mevinai_theme 配色",
            })
            resolve(this.themes)
        })
    })
}


// 重写 get_preview_html 以添加 data-theme2
frappe.ui.ThemeSwitcher.prototype.get_preview_html = function (theme) {
    console.log(`get_preview_html ing👇`)
    const preview = originalGetPreviewHtml.call(this, theme)
    观主题名(theme.name)
    if (二级主题名) {
        preview.find("[data-theme]").attr("data-theme2", 二级主题名)
    }
    // 重新绑定点击事件（无需修改，依赖 theme.name 和 theme.name2）
    // preview.off("click").on("click", () => {
    //     if (
    //         this.current_theme === 一级主题名 && // 匹配基础主题
    //         this.current_theme2 === 二级主题名
    //     )
    //         return

    //     this.themes.forEach(th => th.$html.removeClass("selected"))
    //     preview.addClass("selected")
    //     this.toggle_theme(theme.name) // 传递完整主题名和 theme2
    // })
    return preview
}

// 扩展 toggle_theme 逻辑（处理唯一主题名）
frappe.ui.ThemeSwitcher.prototype.toggle_theme = function (themeName) {
    // console.log(`toggle_theme ing👇`)
    观主题名(themeName)
    originalToggleTheme.call(this, 一级主题名) // 调用原生逻辑切换基础主题

    this.current_theme = themeName;
    // console.log(`themeName 👉`,themeName)
    // console.log(`二级主题名 👉`,二级主题名)
    if (二级主题名) {
        document.documentElement.setAttribute("data-theme2", 二级主题名)
    }else{
        document.documentElement.removeAttribute("data-theme2");
    }

    localStorage.setItem("老鱼主题名", themeName)
}

// 保存原始方法引用
const originalRefresh = frappe.ui.ThemeSwitcher.prototype.refresh
// 重写 refresh 方法以正确设置 current_theme
frappe.ui.ThemeSwitcher.prototype.refresh = function () {
    // console.log(`refresh ing👇`)
    // 从 DOM 获取当前主题模式
    const themeMode = document.documentElement.getAttribute("data-theme-mode") || "light"

    const 缓存老鱼主题名 = localStorage.getItem("老鱼主题名")
    // console.log(`缓存老鱼主题名 👉`,缓存老鱼主题名)
    if (缓存老鱼主题名) {
        观主题名(缓存老鱼主题名)
        this.current_theme = 缓存老鱼主题名
    } else {
        // 否则使用 DOM 中的主题模式
        this.current_theme = themeMode
    }

    this.fetch_themes().then(() => {
        this.render();
    });
    // 调用原始方法渲染主题列表
    // originalRefresh.call(this)
    // console.log(`this.current_theme 👉`,this.current_theme)
}

const originalSetTheme = frappe.ui.set_theme
frappe.ui.set_theme = function (theme) {
    originalSetTheme.call(this, theme) // 调用原生逻辑
    const 缓存老鱼主题名 = localStorage.getItem("老鱼主题名")
    缓存老鱼主题名 && 观主题名(缓存老鱼主题名)

    if (二级主题名) {
        document.documentElement.setAttribute("data-theme2", 二级主题名)
    }else{
        document.documentElement.removeAttribute("data-theme2");
    }
}
